import java.util.Scanner;

public class ShapeAreaCalculator {
    private static final String SQUARE = "正方形";
    private static final String CIRCLE = "圆形";
    private static final String TRIANGLE = "三角形";
    private static final String TRAPEZOID = "梯形";

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 用户选择形状
        System.out.println(" 请输入形状名称（正方形、圆形、三角形 或 梯形）：");
        String shape = scanner.nextLine().trim();

        // 根据用户选择调用相应的方法
        if (SQUARE.equals(shape)) {
            calculateSquareArea(scanner);
        } else if (CIRCLE.equals(shape)) {
            calculateCircleArea(scanner);
        } else if (TRIANGLE.equals(shape)) {
            calculateTriangleArea(scanner);
        } else if (TRAPEZOID.equals(shape)) {
            calculateTrapezoidArea(scanner);
        } else {
            System.out.println(" 不支持的形状类型。");
        }
        scanner.close();
    }

    private static void calculateSquareArea(Scanner scanner) {
        System.out.println(" 请输入正方形的边长：");
        double side = scanner.nextDouble();
        double area = squareArea(side);
        System.out.println(" 正方形的面积是：" + area);
    }

    private static void calculateCircleArea(Scanner scanner) {
        System.out.println(" 请输入圆形的半径：");
        double radius = scanner.nextDouble();
        double area = circleArea(radius);
        System.out.println(" 圆形的面积是：" + area);
    }

    private static void calculateTriangleArea(Scanner scanner) {
        System.out.println(" 请输入三角形的第一条边长：");
        double a = scanner.nextDouble();
        System.out.println(" 请输入三角形的第二条边长：");
        double b = scanner.nextDouble();
        System.out.println(" 请输入三角形的第三条边长：");
        double c = scanner.nextDouble();
        double area = triangleArea(a, b, c);
        System.out.println(" 三角形的面积是：" + area);
    }

    private static void calculateTrapezoidArea(Scanner scanner) {
        System.out.println(" 请输入梯形的上底长度：");
        double base1 = scanner.nextDouble();
        System.out.println(" 请输入梯形的下底长度：");
        double base2 = scanner.nextDouble();
        System.out.println(" 请输入梯形的高：");
        double height = scanner.nextDouble();
        double area = trapezoidArea(base1, base2, height);
        System.out.println(" 梯形的面积是：" + area);
    }

    /**
     * 计算正方形面积的静态方法
     * @param side 正方形的边长
     * @return 返回正方形的面积
     */
    public static double squareArea(double side) {
        return side * side;
    }

    /**
     * 计算圆形面积的静态方法
     * @param radius 圆形的半径
     * @return 返回圆形的面积
     */
    public static double circleArea(double radius) {
        return Math.PI * radius * radius;
    }

    /**
     * 计算三角形面积的静态方法（使用海伦公式）
     * @param a 三角形的第一条边长
     * @param b 三角形的第二条边长
     * @param c 三角形的第三条边长
     * @return 返回三角形的面积
     */
    public static double triangleArea(double a, double b, double c) {
        double s = (a + b + c) / 2;
        return Math.sqrt(s * (s - a) * (s - b) * (s - c));
    }

    /**
     * 计算梯形面积的静态方法
     * @param base1 梯形的上底长度
     * @param base2 梯形的下底长度
     * @param height 梯形的高
     * @return 返回梯形的面积
     */
    public static double trapezoidArea(double base1, double base2, double height) {
        return (base1 + base2) * height / 2;
    }
}